package com.allm.ai.common.repository;

import com.allm.ai.common.entity.AiModel;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Optional;

/**
 * AI模型Repository接口
 */
@Repository
public interface AiModelRepository extends JpaRepository<AiModel, Long> {

    /**
     * 根据名称查找模型
     */
    Optional<AiModel> findByName(String name);

    /**
     * 根据服务提供商查找模型
     */
    List<AiModel> findByServiceProvider(String serviceProvider);

    /**
     * 根据模型类型查找模型
     */
    List<AiModel> findByModelType(String modelType);

    /**
     * 查找所有启用的模型
     */
    List<AiModel> findByIsActiveTrue();

    /**
     * 查找所有免费的模型
     */
    List<AiModel> findByIsFreeTrue();

    /**
     * 根据条件分页查询
     */
    @Query("SELECT a FROM AiModel a WHERE " +
           "(:name IS NULL OR a.name LIKE %:name%) AND " +
           "(:serviceProvider IS NULL OR a.serviceProvider = :serviceProvider) AND " +
           "(:modelType IS NULL OR a.modelType = :modelType) AND " +
           "(:isActive IS NULL OR a.isActive = :isActive) AND " +
           "(:isFree IS NULL OR a.isFree = :isFree)")
    Page<AiModel> findByConditions(
            @Param("name") String name,
            @Param("serviceProvider") String serviceProvider,
            @Param("modelType") String modelType,
            @Param("isActive") Boolean isActive,
            @Param("isFree") Boolean isFree,
            Pageable pageable
    );

    /**
     * 检查名称是否存在
     */
    boolean existsByName(String name);

    /**
     * 根据名称删除模型
     */
    void deleteByName(String name);
} 